09. Arm Mover: Launch and Interact
Arm Mover: Launch and Interact
Launching the project with the new service
To get the
arm_mover
node, and accompanying
safe_move
service to launch along with all of the other nodes, you will modify
robot_spawn.launch
.
Launch files, when they exist, are located within the
launch
directory in the root of a catkin package.
simple_arm
’s launch file is located in
~/catkin_ws/src/simple_arm/launch
To get the arm_mover node to launch, simply add the following:
<!-- The arm mover node -->
<node name="arm_mover" type="arm_mover" pkg="simple_arm">
<rosparam>
min_joint_1_angle: 0
max_joint_1_angle: 1.57
min_joint_2_angle: 0
max_joint_2_angle: 1.0
</rosparam>
</node>
More information on the format of the launch file can be found here .
Testing the new service
Now that you've modified the launch file, you are ready to test everything out.
To do so, launch the
simple_arm
, verify that the
arm_mover
node is running, and that the
safe_move
service is listed:
Note:
You will need to make sure that you've exited out of your previous
roslaunch
session before re-launching.
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roslaunch simple_arm robot_spawn.launch
Then, in a new terminal, verify that the node and service have indeed launched.
$ rosnode list
$ rosservice list
Assuming that both the service (
/arm_mover/safe_move
) and the node (
/arm_mover
) show up as expected (If they've not, check the logs in the
roscore
console), you can now interact with the service using
rosservice
.
To view the camera image stream, you can use the command
rqt_image_view
(you can learn more about rqt and the associated tools
here
):
$ rqt_image_view /rgb_camera/image_raw
Adjusting the view
The camera is displaying a gray image. This is as to be expected, given that it is straight up, towards the gray sky of our gazebo world.
To point the camera towards the numbered blocks on the counter top, we would need to rotate both joint 1 and joint 2 by approximately pi/2 radians. Let’s give it a try:
$ cd ~/catkin_ws/
$ source devel/setup.bash
$ rosservice call /arm_mover/safe_move "joint_1: 1.57
joint_2: 1.57"
Note:
rosservice call
can tab-complete the request message, so that you don’t have to worry about writing it out by hand. Also, be sure to include a line break between the two joint parameters.
Upon entering the command, you should be able to see the arm move, and eventually stop, reporting the amount of time it took to move the arm to the console. This is as expected.
What was not expected is the resulting position of the arm. Looking at the
roscore
console, we can very clearly see what the problem was. The requested angle for joint 2 was out of the safe bounds. We requested 1.57 radians, but the maximum joint angle was set to 1.0 radians.
By setting the
max_joint_2_angle
on the parameter server, we should be able to bring the blocks into view the next time a service call is made. To increase joint 2’s maximum angle, you can use the command
rosparam
$ rosparam set /arm_mover/max_joint_2_angle 1.57
Now we should be able to move the arm such that all of the blocks are within the field of view of the camera:
rosservice call /arm_mover/safe_move "joint_1: 1.57
joint_2: 1.57"
And there you have it. All of the blocks are within the field of view!